package com.share.wechat.file.service.impl;

import com.share.common.tools.ID.IDutils;
import com.share.common.tools.fille.Base64Util;
import com.share.wechat.file.entity.FileEntity;
import com.share.wechat.file.repository.inter.FileRepository;
import com.share.wechat.file.service.FileService;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.io.File;
import java.util.Arrays;
import java.util.Date;

@Service
public class FileServiceImpl implements FileService {
    private Logger logger = Logger.getLogger(this.getClass());
    @Resource
    private FileRepository fileRepository;

    @Override
    public String saveFile(byte[] date, String fileName) {
        if (StringUtils.isEmpty(fileName)) {
            if (logger.isInfoEnabled()) {
                logger.info("未传入文件名!");
                return null;
            }
        }
        if (fileName.lastIndexOf(".") == fileName.length()) {
            if (logger.isInfoEnabled()) {
                logger.info("该文件" + fileName + "名的格式不对");
            }
            return null;
        }
        if (date.length == 0) {
            if (logger.isInfoEnabled()) {
                logger.info("未检测到存贮文件的信息");

            }
            return null;
        }
        String fileData = Base64Util.dateToBase64(date);
        if (StringUtils.isEmpty(fileData)) {
            if (logger.isInfoEnabled()) {
                logger.info("转出数据后数据为" + Arrays.toString(date) + " 请检查!");

            }
            return null;
        }
        FileEntity fileEntity = new FileEntity();
        fileEntity.setId(IDutils.getUUID());
        fileEntity.setCreateTime(new Date());

        fileEntity.setFileName(IDutils.genImageName() + fileName);
        fileEntity.setType(fileName.substring(fileName.lastIndexOf("."), fileName.length()));

        fileRepository.save(fileEntity);
        return fileEntity.getFileName();
    }

    @Override
    public String saveFile(FileEntity file) {
        if (StringUtils.isEmpty(file.getId())) {
            file.setId(IDutils.getUUID());
            if (logger.isInfoEnabled()) {
                logger.info("设置该文件的id是" + file.getId());
            }
        }
        if (!file.getFileName().contains(".")){
            logger.info("文件类型未知");
            return null;
        }
        if (StringUtils.isEmpty(file.getFileName())) {
            if (logger.isInfoEnabled()) {
                logger.info("该文件的文件名类名未知,文件名为" + file.getFileName());
            }
            return null;
        }
        file.setType(file.getFileName().substring(file.getFileName().lastIndexOf(".")+1, file.getFileName().length()));

        file.setFileName(IDutils.genImageName() + file.getFileName());
        if (StringUtils.isEmpty(file.getType())) {
            if (logger.isInfoEnabled()) {
                logger.info("文件类型未知,文件名为" + file.getFileName());
            }
            return null;
        }
        file.setCreateTime(new Date());
        fileRepository.save(file);

        return file.getFileName();
    }

    @Override
    public String getDataById(String id) {
        if (StringUtils.isEmpty(id)) {
            logger.info("id为空 请检查");
            return null;
        }

        FileEntity entity = fileRepository.findOne(id);
        if (StringUtils.isEmpty(entity.getFileData())) {
            logger.info("id为" + id + "未查询到数据");
            return null;
        }

        return entity.getFileData();
    }

    @Override
    public String readDataByFileName(String fileName) {
        if (StringUtils.isEmpty(fileName)) {
            logger.info("fileName为空 请检查");
            return null;
        }

        FileEntity entity = fileRepository.findByFileName(fileName);
        if (StringUtils.isEmpty(entity.getFileData())) {
            logger.info("fileName为" + fileName + "未查询到数据");
            return null;
        }

        return entity.getFileData();
    }


    @Override
    public String saveFileToDir(File file,String filePath) {


        return null;
    }
}
